#include <cstdio>
#include <algorithm>

using namespace std;

typedef long long ll;
const int maxn=50000, size=131072, mods=998244353;

ll qpower(ll a, int n) {
    ll s=1;
    for (; n; n/=2) {
        if (n&1) s=s*a%mods;
        a=a*a%mods;
    }
    return s;
}

const ll invsize=qpower(size, mods-2);

ll getW(int x) {
    static const int g=3;
    return qpower(g, (mods-1)/x);
}

void ntt(int n, ll a[], int flag) {
    static int pos[size];
    int l;
    for (l=0; (1<<l)<n; l++);
    l--;
    for (int i=1; i<size; i++) {
        pos[i] = (pos[i>>1]>>1)|((i&1)<<l);
        if (pos[i]>i) swap(a[pos[i]], a[i]);
    }

    for (int len=1; len<n; len*=2) {
        ll w=getW(len*2);
        if (flag<0) w=qpower(w, mods-2);
        for (int i=0; i<n; i+=2*len) {
            ll t=1;
            for (int j=0; j<len; j++) {
                ll x=a[i+j], y=a[i+len+j]*t%mods;
                a[i+j] = (x+y)%mods;
                a[i+len+j] = (x+mods-y)%mods;
                t = t*w%mods;
            }
        }
    }
}

void mul(int size, int k, ll c[], ll a[], ll b[], ll t) {
  for (int i = 0; i < size; i++)
    c[i] = a[i] * b[i] % mods;
  ntt(size, c, -1);
  for (int i = 0; i < size; i++)
    c[i] = c[i] * invsize % mods;
  for (int i = k; i<=2 * k; i++) {
    c[i - k] = (c[i - k] + t * c[i] % mods) % mods;
    c[i] = 0;
  }
  ntt(size, c, 1);
}

int main() {
    freopen("derivative.in", "r", stdin);
    freopen("derivative.out", "w", stdout);

    ll n, k, a, b;
    scanf("%lld %lld %lld %lld", &n, &k, &a, &b);

    static ll s[size], t[size];
    s[0]=1, s[1]=b;
    t[0]=1;
    ntt(size, s, 1);
    ntt(size, t, 1);
    mul(size, k, s, s, t, a);
    for (ll x=n*k; x; x/=2) {
        if (x%2) {
            mul(size, k, t, t, s, a);
        }
        mul(size, k, s, s, s, a);
    }

    ntt(size, t, -1);
    printf("%lld\n", t[0]*invsize%mods);

    fclose(stdin);
    fclose(stdout);
    return 0;
}
